package com.senlingspace.payment.lakala.bean.response;

import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.senlingspace.common.enums.LakalaPaymentTypeEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;


/**
 * 拉卡拉聚合被扫响应
 *
 * @author lebronjames
 * @date 2024/07/24
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class LakalaMicroPayResponse extends LakalaCommonResponse {

    /**
     * 响应数据
     */
    @JsonProperty("resp_data")
    private RespData respData;

    @Data
    public static class RespData implements Serializable {

        /**
         * 是否需要发起查询
         * <p>
         * 0=不需要 1=需要 当返回1时，代表订单处理中，商户需主动发起查询
         */
        @JsonProperty("need_query")
        private String needQuery;

        /**
         * 拉卡拉分配的商户号（请求接口中的商户号）
         */
        @JsonProperty("merchant_no")
        private String merchantNo;

        /**
         * 请求报文中的商户交易流水号
         * <p>
         * 其实就是平台自身唯一订单号
         */
        @JsonProperty("out_trade_no")
        private String outTradeNo;

        /**
         * 拉卡拉交易流水号
         */
        @JsonProperty("trade_no")
        private String tradeNo;

        /**
         * 拉卡拉对账单流水号
         * <p>
         * 注意：这个字段非常重要，很多地方都需要使用
         */
        @JsonProperty("log_no")
        private String logNo;

        /**
         * 账户端交易流水号
         */
        @JsonProperty("acc_trade_no")
        private String accTradeNo;

        /**
         * 钱包类型
         *
         * @see LakalaPaymentTypeEnum
         */
        @JsonProperty("account_type")
        private String accountType;

        /**
         * 订单金额
         * <p>
         * 单位分，整数数字型字符 订单金额=付款人实际发生金额+商户优惠金额+账户端优惠金额
         */
        @JsonProperty("total_amount")
        private String totalAmount;

        /**
         * 付款人实际发生金额
         */
        @JsonProperty("payer_amount")
        private String payerAmount;

        /**
         * 账户端应结订单金额
         * <p>
         * 应结订单金额，单位分 ，账户端应结订单金额=付款人实际发生金额+账户端优惠金额
         */
        @JsonProperty("acc_settle_amount")
        private String accSettleAmount;

        /**
         * 商户优惠金额（账户端）
         * <p>
         * 账户端返回商户优惠金额，单位分
         */
        @JsonProperty("acc_mdiscount_amount")
        private String accMdiscountAmount;

        /**
         * 账户端优惠金额
         * <p>
         * 账户端返回账户端优惠金额，单位分
         */
        @JsonProperty("acc_discount_amount")
        private String accDiscountAmount;

        /**
         * 账户端其它优惠金额
         * <p>
         * 账户端返回账户端其它优惠金额，单位分
         */
        @JsonProperty("acc_other_discount_amount")
        private String accOtherDiscountAmount;

        /**
         * 交易完成时间
         * <p>
         * 以账户端返回时间为准
         */
        @JsonProperty("trade_time")
        private String tradeTime;

        /**
         * 付款银行
         */
        @JsonProperty("bank_type")
        private String bankType;

        /**
         * 银行卡类型
         *
         * @see com.senlingspace.payment.enums.LakalaCardTypeEnum
         */
        @JsonProperty("card_type")
        private String cardType;

        /**
         * 备注
         */
        @JsonProperty("remark")
        private String remark;

        /**
         * 账户端返回信息域
         */
        @JsonProperty("acc_resp_fields")
        private JSONObject accRespFields;

    }

}
